
import { EventConfig } from "../event/EventConfig";
import EventMgr from "../event/EventMgr";
/**
 * 管理类基类
 * @author 神兽白泽
 * @description 交流群：415468592
 */
export default class ManagerBase {
    /** 需要监听事件的组件对象 */
    protected static targets: Map<object, any> = new Map();

    /**
     * 初始化管理类监听的 事件
     * - 批量注册事件列表
     * @param event_list 事件列表
     * @param event_target  事件脚本
     */
    protected static initEvent(event_list: Array<EventConfig> | EventConfig, event_target: object) {
        if (typeof event_list == "string") {
            EventMgr.on(event_list, this.responseBase, event_target);
        } else if (Array.isArray(event_list)) {
            event_list.forEach((value, key) => {
                EventMgr.on(value, this.responseBase, event_target);
            })
        }
    }

    /**
     * 响应事件
     * @param event_name 事件名 
     * @param args 参数列表
     */
    public static responseBase(event_name: EventConfig, ...args: any[]) {
        this.responseEvent(event_name, ...args)
        this.targets.forEach(target => {
            target && target.responseEvent(event_name, ...args);
        });
    }

    protected static responseEvent(event_name: EventConfig, ...args: any[]) {
        // 子类重写此方法，以获取响应
    }

    public static setTarget(target: object) {
        this.targets.set(target, target);
    }

    /**
     * 清空组件对象
     * @param target 
     */
    public static clearTarget(target: object) {
        this.targets.forEach((value, key) => {
            target == key && this.targets.delete(key);
        });
    }
}
